Skip to main content

Point-of-Service Systems

In OpenHIE, a point-of-service system is anything where health data is created or consumed at the place care happens. They are the edge of the architecture and, from the exchange's perspective, the least controllable part of it: they are procured separately, upgraded on their own schedules, and often predate the exchange by a decade.

The architectural discipline is therefore not to standardise the point-of-service layer, but to standardise what the exchange demands of it.


The categories​

CategoryCreatesTypical exchange need
EMR / EHREncounters, diagnoses, medications, observationsPush clinical summaries; look up patient identity; retrieve prior records
Community health worker appHousehold registrations, home visits, referralsOffline-first sync; identity resolution; referral tracking
Laboratory information systemOrders, specimens, resultsReceive orders, return results (LOINC-coded)
Pharmacy / dispensingPrescriptions, dispensing eventsReceive prescriptions; report stock consumption
Radiology / PACSImaging studies, reportsDICOM storage; report as document or observation
Logistics (LMIS)Stock on hand, requisitions, receiptsProduct catalogue alignment; facility identity
HMISAggregate indicatorsConsume aggregates or events; facility identity
Insurance / claimsEligibility checks, claimsClient identity; provider identity; coded services
Client-facing appsSelf-reported data, appointment requestsAuthenticated patient access; consent

An OpenHIE architecture does not require all of these. It requires that the ones that exist agree about identity and vocabulary.


What the exchange requires of a point-of-service system​

This list belongs in a procurement specification. Systems that cannot meet it should not be bought, whatever else they do well.

  1. Use the shared client identifier, or be able to store and return one alongside its local identifier. A system that can hold only one identifier per patient cannot participate in a federated ecosystem.
  2. Use the shared facility identifier from the facility registry — including for sub-units, if the reporting model distinguishes them.
  3. Identify the health worker using the health worker registry identifier, not a local username.
  4. Emit data in an agreed standard — normally FHIR against named profiles, or HL7 v2 for laboratory and ADT traffic.
  5. Code data against agreed terminology — LOINC for observations, SNOMED CT or ICD for problems, per the terminology binding decisions.
  6. Authenticate to the exchange with a machine identity, not a shared password embedded in a config file.
  7. Behave when the exchange is unavailable — queue and retry with backoff, never silently drop, never block clinical work.
  8. Record provenance — which system and which user asserted the data.
  9. Support a defined error contract — so that a rejected message produces an actionable message to a human, not a log line nobody reads.

The integration adapter pattern​

Most point-of-service systems will not implement the exchange's interface natively. Rather than modifying each one, put an adapter between the system and the interoperability layer:

┌──────────────┐ native format ┌───────────┐ FHIR/HTTPS ┌────────────┐
│ Legacy LIS │────────────────────▶│ Adapter │───────────────▶│ IOL │
│ (HL7 v2.3) │◀────────────────────│ (mediator)│◀───────────────│ │
└──────────────┘ └───────────┘ └────────────┘
maps codes,
resolves identity,
handles retries

This is an anti-corruption layer: the exchange's model does not leak into the legacy system, and the legacy system's quirks do not leak into the exchange. It also localises the change when the legacy system is eventually replaced.

The adapter usually runs as a mediator inside OpenHIM or as a channel in an integration engine.


Onboarding a new point-of-service system​

A repeatable process, worth writing down once and reusing:

  1. Register the system — a machine identity, credentials, and a named technical owner who answers the phone.
  2. Agree the use case — one specific exchange, not "integration" in general.
  3. Map identifiers — how the system's local IDs relate to shared ones, and what happens when there is no match.
  4. Map terminology — local codes to the national value sets. Expect this to take longer than the technical work.
  5. Build and test the adapter — against a sandbox environment with synthetic data, never production.
  6. Conformance test — profile validation, negative cases, error handling, behaviour under outage.
  7. Pilot in one facility, with a rollback plan.
  8. Monitor — message volume, error rate, latency. See observability.

Steps 3 and 4 are the schedule. Teams that plan for steps 5 and 6 and treat 3 and 4 as prerequisites are the ones that overrun.


Open-source point-of-service systems​

SystemCategoryNotes
OpenMRSEMRConcept-dictionary based; FHIR module available
OpenEMREMR / practice managementAmbulatory focus, long-established
BahmniEMR + hospitalBuilt on OpenMRS, OpenELIS and Odoo
GNU HealthHospital / HMISIncludes hospital management and lab modules
OpenELIS GlobalLaboratoryUsed in several national deployments
CHT (Community Health Toolkit)CHW appOffline-first, SMS-capable
DHIS2HMIS (and Tracker as a point-of-service)Aggregate reporting plus individual-level tracker
OpenLMISLogisticsSupply chain and stock management
openIMISInsuranceClaims and beneficiary management

Each entry is Tier 2 (established open-source community). Check current activity before committing — see the platform directory for verification dates.


References​